package itheima.service;

import itheima.dao.AccountDao;
import utils.C3P0Util;

import java.sql.Connection;
import java.sql.SQLException;

/*
    service层定义AccountService类,操作dao层的AccountDao类
    转账方法:
        名称: transfer
        参数: 进账账户,出账账户,转账金额
        注意:连接对象,service层自己创建,进账账户,出账账户,转账金额由view层传递

    步骤:
        1.创建AccountDao类的对象
        2.获取连接对象
        3.开启事务
        4.调用方法(进账/出账的方法)
        5.方法正常执行,提交事务
        6.方法执行出现问题,回滚事务
        7.关闭资源

    注意:
        1.service层负责异常处理,有异常try-catch-finally
        2.service层负责事务管理
 */
public class AccountService {
    public void transfer(String inName,String outName,double transferMoney) {
        Connection con = null;
        try {
            //1.创建AccountDao类的对象
            AccountDao dao = new AccountDao();

            //2.获取连接对象
            con = C3P0Util.getConnection();

            //3.开启事务
            con.setAutoCommit(false);

            //4.调用方法(进账/出账的方法)
            //调用进账方法
            dao.in(con,inName,transferMoney);

            System.out.println(1/0);//出现异常

            //调用出账方法
            dao.out(con,outName,transferMoney);

            //5.方法正常执行,提交事务
            con.commit();


        } catch (Exception e) {
            e.printStackTrace();
            //6.方法执行出现问题,回滚事务
            if(con!=null) {
                try {
                    con.rollback();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        } finally {
            //7.关闭资源
            C3P0Util.release(con,null,null);
        }
    }
}
